import Vue from 'vue'
import Router from 'vue-router'
import routes from './router'
import { setTitle } from '../lib/util';

Vue.use(Router)

const router = new Router({
  routes
})

const IS_LOGINED = true;

// 前置守卫 to要跳转的页面 from当前页面 next跳转函数
router.beforeEach((to, from, next) => {
  // 设置页面title
  to.meta && setTitle(to.meta.title)
  if(to.name !== 'login') {
    if(IS_LOGINED) {
      next()
    } else {
      next({ name: 'login' })
    }
  } else {
    if(IS_LOGINED) {
      next({ name: 'home'})
    } else {
      next()
    }
  }
})

// 后置路由守卫 不需要跳转所以没有next函数
router.afterEach((to, from) => {

})

// 导航被确认(所有的导航钩子全部结束)之前同时所有组件内守卫和异步路由执行后调用
router.beforeResolve((to, from, next) => {
  next()
})

/**
 * 完整的路由流程
 * 1.导航被触发
 * 2.失活的组件中调用离开守卫
 * 3.调用全局的前置守卫
 * 4.重用的组件调用 beforeRouteUpdate
 * 5.调用路由独享的守卫
 * 6.解析异步路由组件
 * 7.在被激活的组件调用 beforerouterenter
 * 8.调用全局解析守卫 beforeResolve
 * 9.导航被确认
 * 10.调用全局的后置守卫
 * 11.出发DOM的更新渲染
 * 12.用创建好的实例调用 beforeRouteEnter守卫里传给next函数的回调函数
 * 
 */

export default router;
